package com.cskaoyan._07expression;

/**
 * @description:
 * @author: 景天
 * @date: 2023/1/29 11:20
 **/
/*
表达式类型提升

如果表达式当中存在多种数据类型 变量 参与运算，
由于表达式的运算结果是唯一的，
所以结果 变量 的数据类型将会提升到"最大取值范围"的那个。有以下规则：

1.  byte、short、char之间不互相转换，一旦发生运算，一律自动转换为int进行运算，结果是int
2.  byte、short、char任何数据类型与int进行计算，一律自动转换为int进行计算，结果是int
3.  byte、short、char、int任何数据类型与long进行计算，一律自动转换为long进行计算，结果是long
4.  byte、short、char、int、long任何数据类型与float进行计算，一律自动转换为float进行计算，结果是float
5.  byte、short、char、int、long、float任何数据类型与double进行计算，一律自动转换为double进行计算，结果是double

特殊的:
String字符串类型可以使用+进行运算, 效果是字符串拼接 , 最终的结果是String类型的
 */
public class Demo {
    public static void main(String[] args) {
        // 1.  byte、short、char之间不互相转换，一旦发生运算，一律自动转换为int进行运算，结果是int
        byte b1 = 1;
        byte b2 = 2;
        // Incompatible types. Found: 'int', required: 'byte'
        // byte + byte = int
        int b4 = b1 + b2;
        byte b3 = (byte) (b1 + b2);
        short s1 = 10;
        // byte + short = int
        int result = b1 + s1;
        char c = 'a';
        int result2 = c + b1;
        System.out.println("result2 = " + result2);

        // 2.  byte、short、char任何数据类型与int进行计算，一律自动转换为int进行计算，结果是int
        // byte + int = int
        int result3 = b1 + b4;
        // 3.  byte、short、char、int任何数据类型与long进行计算，一律自动转换为long进行计算，结果是long
        // int + long
        long l = 111L;
        long result4 = l + b4;

        // 4.  byte、short、char、int、long任何数据类型与float进行计算，一律自动转换为float进行计算，结果是float
        float f = 3.14F;
        float result5 = b4 + f;

        // 思考
        byte num = 1+2;
        // byte num2 = 127 + 1;

        // String类型的+运算 等价于拼接
        String s = "abc";
        System.out.println(1+s+1);
    }
}
